/*
 * TratamentoPassado.java
 *
 * Created on 15 de Maio de 2007, 10:55
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package pt.iscte.dcti.es.rhplus.utilizador;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;
import java.util.Hashtable;
import java.util.LinkedList;

import pt.iscte.dcti.es.rhplus.sistema.persistencia.AcessoBD;

/**
 *
 * @author Gustavo Cabral
 * @author Helena Monteiro
 * @author Joao Catarino
 * @author Tiago Moreiras
 */
public class TratamentoPassado {

	/** Creates a new instance of TratamentoPassado */
	public TratamentoPassado(final int id_tratamento_passado, final int id_pessoa, final Date data, final String descricao, final String observacao) {

		this.id_tratamento_passado = id_tratamento_passado;
		this.id_pessoa = id_pessoa;
		this.data = data;
		this.descricao = descricao;
		this.observacao = observacao;

	}

	public int getIdTratamentoPassado() {
		return id_tratamento_passado;
	}

	public int getIdPessoa() {
		return id_pessoa;
	}

	public Date getData() {
		return data;
	}

	public void setData(final Date data) {
		this.data = data;
	}

	public String getDescricao() {
		return descricao;
	}

	public void setDescricao(final String descricao) {
		this.descricao = descricao;
	}

	public String getObservacao() {
		return observacao;
	}

	public void setObservacao(final String observacao) {
		this.observacao = observacao;
	}

	public static TratamentoPassado devolve(final int id_tratamento_passado) throws SQLException, ClassNotFoundException, InstantiationException,
			IllegalAccessException {

		// Consulta a BD
		AcessoBD acesso_bd = new AcessoBD();
		acesso_bd.carregaDriverEAbreLigacao();
		String qryName = new String("devolver_tratamento_passado");
		Hashtable<String, Object> dados_do_tratamento_passado = new Hashtable<String, Object>();
		dados_do_tratamento_passado.put("var_id_tratamento_passado", id_tratamento_passado);

		ResultSet result_set = acesso_bd.executaSelect(qryName, dados_do_tratamento_passado);

		result_set.next();

		// Cria o Tratamento
		int id_pessoa = result_set.getInt("id_pessoa");
		Date data = result_set.getDate("data");
		String descricao = result_set.getString("descricao");
		String observacao = result_set.getString("observacao");

		acesso_bd.fechaLigacao();

		TratamentoPassado tratamento_passado = new TratamentoPassado(id_tratamento_passado, id_pessoa, data, descricao, observacao);

		return tratamento_passado;
	}

	public static LinkedList<TratamentoPassado> devolveTodos() throws SQLException, ClassNotFoundException, InstantiationException,
			IllegalAccessException {

		// Consulta a BD
		AcessoBD acesso_bd = new AcessoBD();
		acesso_bd.carregaDriverEAbreLigacao();
		String qryName = new String("devolver_todos_os_tratamentos_passados");
		ResultSet result_set = acesso_bd.executaSelect(qryName, null);

		// Criar a lista de Tratamentos Passados
		LinkedList<TratamentoPassado> lista_de_tratamentos_passados = new LinkedList<TratamentoPassado>();

		while (result_set.next()) {

			// Cria o Tratamento
			int id_tratamento_passado = result_set.getInt("id_tratamento_passado");
			int id_pessoa = result_set.getInt("id_pessoa");
			Date data = result_set.getDate("data");
			String descricao = result_set.getString("descricao");
			String observacao = result_set.getString("observacao");

			TratamentoPassado tratamento_passado = new TratamentoPassado(id_tratamento_passado, id_pessoa, data, descricao, observacao);

			lista_de_tratamentos_passados.add(tratamento_passado);
		}
		
		acesso_bd.fechaLigacao();
		
		return lista_de_tratamentos_passados;
	}

	public static LinkedList<TratamentoPassado> devolveTodosDoUtente(final int id_pessoa) throws SQLException, ClassNotFoundException,
			InstantiationException, IllegalAccessException {

		// Consulta a BD
		AcessoBD acesso_bd = new AcessoBD();
		acesso_bd.carregaDriverEAbreLigacao();
		String qryName = new String("devolver_todos_os_tratamentos_passados_do_utente");
		Hashtable<String, Object> dados_do_tratamento_passado = new Hashtable<String, Object>();
		dados_do_tratamento_passado.put("var_id_pessoa", id_pessoa);

		ResultSet result_set = acesso_bd.executaSelect(qryName, dados_do_tratamento_passado);

		// Criar a lista de Tratamentos Passados
		LinkedList<TratamentoPassado> lista_de_tratamentos_passados = new LinkedList<TratamentoPassado>();

		while (result_set.next()) {

			// Cria o Tratamento
			int id_tratamento_passado = result_set.getInt("id_tratamento_passado");
			Date data = result_set.getDate("data");
			String descricao = result_set.getString("descricao");
			String observacao = result_set.getString("observacao");

			TratamentoPassado tratamento_passado = new TratamentoPassado(id_tratamento_passado, id_pessoa, data, descricao, observacao);

			lista_de_tratamentos_passados.add(tratamento_passado);
		}

		acesso_bd.fechaLigacao();
		
		return lista_de_tratamentos_passados;
	}

	public static void insere(final Hashtable<String, Object> dados_do_tratamento_passado) throws SQLException, ClassNotFoundException,
			InstantiationException, IllegalAccessException {

		AcessoBD acesso_bd = new AcessoBD();
		acesso_bd.carregaDriverEAbreLigacao();
		String qryName = new String("inserir_tratamento_passado");
		acesso_bd.executaUpdate(qryName, dados_do_tratamento_passado);
		acesso_bd.fechaLigacao();
	}

	public static void altera(final Hashtable<String, Object> dados_do_tratamento_passado) throws SQLException, ClassNotFoundException,
			InstantiationException, IllegalAccessException {

		AcessoBD acesso_bd = new AcessoBD();
		acesso_bd.carregaDriverEAbreLigacao();
		String qryName = new String("alterar_tratamento_passado");
		acesso_bd.executaUpdate(qryName, dados_do_tratamento_passado);
		acesso_bd.fechaLigacao();
	}

	public static void remove(final int id_tratamento_passado) throws SQLException, ClassNotFoundException,
			InstantiationException, IllegalAccessException {

		AcessoBD acesso_bd = new AcessoBD();
		acesso_bd.carregaDriverEAbreLigacao();
		String qryName = new String("remover_tratamento_passado");
		Hashtable<String, Object> dados_do_tratamento_passado = new Hashtable<String, Object>();
		dados_do_tratamento_passado.put("var_id_tratamento_passado", new Integer(id_tratamento_passado));

		acesso_bd.executaUpdate(qryName, dados_do_tratamento_passado);
		acesso_bd.fechaLigacao();
	}

	public static int devolveUltimoIdentificadorDeInsercao() throws SQLException, ClassNotFoundException, InstantiationException,
			IllegalAccessException {
		AcessoBD acesso_bd = new AcessoBD();
		acesso_bd.carregaDriverEAbreLigacao();
		String qryName = new String("devolver_ultimo_id_de_tratamento_passado");
		ResultSet result_set = acesso_bd.executaSelect(qryName, null);
		result_set.next();
		int ultimo_id_tratamento_passado = result_set.getInt("ultimo_id");
		acesso_bd.fechaLigacao();
		
		return ultimo_id_tratamento_passado;
	}

	public void gravaParaBaseDeDados() throws SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException {
		TratamentoPassado.altera(toHashtable());
	}

	public boolean equals(final int id_tratamento_passado, final int id_pessoa) {
		return this.getIdTratamentoPassado() == id_tratamento_passado && this.getIdTratamentoPassado() == id_pessoa;
	}

	public String toString() {
		return id_tratamento_passado + ";" + id_pessoa + ";" + data + ";" + descricao + ";" + observacao + ";";
	}

	public Hashtable<String, Object> toHashtable() {
		Hashtable<String, Object> dados_do_tratamento_passado = new Hashtable<String, Object>();

		dados_do_tratamento_passado.put("var_id_tratamento_passado", new Integer(this.getIdTratamentoPassado()));
		dados_do_tratamento_passado.put("var_id_pessoa", this.getIdPessoa());
		dados_do_tratamento_passado.put("var_data", this.getData());
		dados_do_tratamento_passado.put("var_descricao", this.getDescricao());
		dados_do_tratamento_passado.put("var_observacao", this.getObservacao());

		return dados_do_tratamento_passado;
	}

	private int id_tratamento_passado;
	private int id_pessoa;
	private Date data;
	private String descricao;
	private String observacao;

}
